home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / full / jbuild / setup / JBuilder / jsamples.z / molecule.jar / sunw / demo / molecule / Molecule.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-04  |  5.9 KB  |  227 lines

  1. package sunw.demo.molecule;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8. import java.awt.Panel;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.MouseListener;
  12. import java.awt.event.MouseMotionListener;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.ObjectInputStream;
  16. import java.io.ObjectOutputStream;
  17. import java.io.Serializable;
  18.  
  19. public class Molecule extends Panel implements Serializable, MouseListener, MouseMotionListener {
  20.    private static int ourVersion = 3;
  21.    // $FF: renamed from: md sunw.demo.molecule.XYZChemModel
  22.    XYZChemModel field_0;
  23.    float xfac;
  24.    int prevx;
  25.    int prevy;
  26.    float xtheta;
  27.    float ytheta;
  28.    float scalefudge;
  29.    Matrix3D amat;
  30.    Matrix3D tmat;
  31.    String message;
  32.    Image backBuffer;
  33.    Graphics backGC;
  34.    private String moleculeName = "HyaluronicAcid";
  35.  
  36.    public Molecule() {
  37.       this.reset();
  38.       this.amat.yrot((double)20.0F);
  39.       this.amat.xrot((double)20.0F);
  40.       ((Component)this).setBackground(Color.white);
  41.       ((Component)this).addMouseListener(this);
  42.       ((Component)this).addMouseMotionListener(this);
  43.    }
  44.  
  45.    public Dimension getPreferredSize() {
  46.       return new Dimension(150, 150);
  47.    }
  48.  
  49.    /** @deprecated */
  50.    public Dimension preferredSize() {
  51.       return this.getPreferredSize();
  52.    }
  53.  
  54.    public synchronized void initialize() {
  55.       InputStream var1 = null;
  56.  
  57.       try {
  58.          var1 = this.getClass().getResourceAsStream(this.moleculeName + ".xyz");
  59.          XYZChemModel var2 = new XYZChemModel(var1);
  60.          Atom.setPanel(this);
  61.          this.field_0 = var2;
  62.          var2.findBB();
  63.          float var3 = var2.xmax - var2.xmin;
  64.          float var4 = var2.ymax - var2.ymin;
  65.          float var5 = var2.zmax - var2.zmin;
  66.          if (var4 > var3) {
  67.             var3 = var4;
  68.          }
  69.  
  70.          if (var5 > var3) {
  71.             var3 = var5;
  72.          }
  73.  
  74.          float var6 = (float)((Component)this).getSize().width / var3;
  75.          float var7 = (float)((Component)this).getSize().height / var3;
  76.          this.xfac = 0.7F * (var6 < var7 ? var6 : var7) * this.scalefudge;
  77.          this.backBuffer = ((Component)this).createImage(((Component)this).getSize().width, ((Component)this).getSize().height);
  78.          this.backGC = this.backBuffer.getGraphics();
  79.       } catch (Exception var9) {
  80.          ((Throwable)var9).printStackTrace();
  81.          this.field_0 = null;
  82.          this.message = ((Throwable)var9).toString();
  83.       }
  84.  
  85.       try {
  86.          if (var1 != null) {
  87.             var1.close();
  88.             return;
  89.          }
  90.       } catch (Exception var8) {
  91.       }
  92.  
  93.    }
  94.  
  95.    private synchronized void rotate(int var1, int var2) {
  96.       this.tmat.unit();
  97.       float var3 = (float)(this.prevy - var2) * (360.0F / (float)((Component)this).getSize().width);
  98.       float var4 = (float)(var1 - this.prevx) * (360.0F / (float)((Component)this).getSize().height);
  99.       this.tmat.xrot((double)var3);
  100.       this.tmat.yrot((double)var4);
  101.       this.amat.mult(this.tmat);
  102.       ((Component)this).repaint();
  103.       this.prevx = var1;
  104.       this.prevy = var2;
  105.    }
  106.  
  107.    public void mouseClicked(MouseEvent var1) {
  108.    }
  109.  
  110.    public synchronized void mousePressed(MouseEvent var1) {
  111.       this.prevx = var1.getX();
  112.       this.prevy = var1.getY();
  113.    }
  114.  
  115.    public void mouseReleased(MouseEvent var1) {
  116.    }
  117.  
  118.    public void mouseEntered(MouseEvent var1) {
  119.    }
  120.  
  121.    public void mouseExited(MouseEvent var1) {
  122.    }
  123.  
  124.    public void mouseDragged(MouseEvent var1) {
  125.       this.rotate(var1.getX(), var1.getY());
  126.    }
  127.  
  128.    public void mouseMoved(MouseEvent var1) {
  129.    }
  130.  
  131.    public synchronized void rotateOnY() {
  132.       ((Component)this).getSize();
  133.       int var1 = ((Component)this).getSize().height;
  134.       int var2 = this.prevx;
  135.       int var3 = (this.prevy + 10) % var1;
  136.       this.rotate(var2, var3);
  137.    }
  138.  
  139.    public synchronized void rotateY(ActionEvent var1) {
  140.       this.rotateOnY();
  141.    }
  142.  
  143.    public synchronized void rotateOnX() {
  144.       int var1 = ((Component)this).getSize().width;
  145.       ((Component)this).getSize();
  146.       int var2 = (this.prevx + 10) % var1;
  147.       int var3 = this.prevy;
  148.       this.rotate(var2, var3);
  149.    }
  150.  
  151.    public synchronized void rotateX(ActionEvent var1) {
  152.       this.rotateOnX();
  153.    }
  154.  
  155.    public synchronized void update(Graphics var1) {
  156.       if (this.backBuffer == null) {
  157.          var1.clearRect(0, 0, ((Component)this).getSize().width, ((Component)this).getSize().height);
  158.       }
  159.  
  160.       this.paint(var1);
  161.    }
  162.  
  163.    public synchronized void paint(Graphics var1) {
  164.       if (this.backBuffer == null) {
  165.          this.initialize();
  166.       }
  167.  
  168.       if (this.field_0 != null) {
  169.          this.field_0.mat.unit();
  170.          this.field_0.mat.translate(-(this.field_0.xmin + this.field_0.xmax) / 2.0F, -(this.field_0.ymin + this.field_0.ymax) / 2.0F, -(this.field_0.zmin + this.field_0.zmax) / 2.0F);
  171.          this.field_0.mat.mult(this.amat);
  172.          this.field_0.mat.scale(this.xfac, -this.xfac, 16.0F * this.xfac / (float)((Component)this).getSize().width);
  173.          this.field_0.mat.translate((float)(((Component)this).getSize().width / 2), (float)(((Component)this).getSize().height / 2), 8.0F);
  174.          this.field_0.transformed = false;
  175.          this.backGC.setColor(((Component)this).getBackground());
  176.          this.backGC.fillRect(0, 0, ((Component)this).getSize().width, ((Component)this).getSize().height);
  177.          this.field_0.paint(this.backGC);
  178.          var1.drawImage(this.backBuffer, 0, 0, this);
  179.       } else {
  180.          if (this.message != null) {
  181.             var1.drawString("Error in model:", 3, 20);
  182.             var1.drawString(this.message, 10, 40);
  183.          }
  184.  
  185.       }
  186.    }
  187.  
  188.    private void writeObject(ObjectOutputStream var1) throws IOException {
  189.       var1.writeInt(ourVersion);
  190.       var1.writeObject(this.moleculeName);
  191.    }
  192.  
  193.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  194.       this.reset();
  195.       if (var1.readInt() != ourVersion) {
  196.          throw new IOException("Molecule.readObject: version mismatch");
  197.       } else {
  198.          this.moleculeName = (String)var1.readObject();
  199.       }
  200.    }
  201.  
  202.    private synchronized void reset() {
  203.       this.field_0 = null;
  204.       this.xfac = 0.0F;
  205.       this.prevx = 0;
  206.       this.prevy = 0;
  207.       this.xtheta = 0.0F;
  208.       this.ytheta = 0.0F;
  209.       this.scalefudge = 1.0F;
  210.       this.amat = new Matrix3D();
  211.       this.tmat = new Matrix3D();
  212.       this.message = null;
  213.       this.backBuffer = null;
  214.       this.backGC = null;
  215.    }
  216.  
  217.    public String getMoleculeName() {
  218.       return this.moleculeName;
  219.    }
  220.  
  221.    public void setMoleculeName(String var1) {
  222.       this.moleculeName = var1;
  223.       this.reset();
  224.       ((Component)this).repaint();
  225.    }
  226. }
  227.